package com.cmcc.qx.util;

import java.util.Date;
import java.util.List;

import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
import net.sf.json.util.JSONUtils;

/**
 * JSON工具类
 * 
 * @author zhangxiaobo
 * 
 */
public class JsonUtil {

	private static final JsonConfig jsonConfig = new JsonConfig();
	static {
		// 支持的日期格式
		String[] fmts = { "yyyy-MM-dd" };
		// 注册日期格式
		JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(fmts, new Date()));

		JsonValueProcessor jvp = new JsonValueProcessorImpl();
		jsonConfig.registerJsonValueProcessor(Date.class, jvp);
	}

	/**
	 * 从一个JSON字符串得到一个java对象
	 * 
	 * @param jsonString
	 *            JSON字符串
	 * @param clazz
	 * @return
	 */
	public static <T> T toBean(String jsonString, Class<T> clazz) {
		JSONObject jsonObject = JSONObject.fromObject(jsonString);
		return toBean(jsonObject, clazz);
	}

	/**
	 * 从一个JSON对象得到一个java对象
	 * 
	 * @param jsonObject
	 *            JSON对象
	 * @param clazz
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static <T> T toBean(JSONObject jsonObject, Class<T> clazz) {
		return (T) JSONObject.toBean(jsonObject, clazz);
	}

	/**
	 * 将JavaBean对象转换为JSON对象
	 * 
	 * @param obj
	 *            JavaBean对象
	 * @return JSON对象
	 */
	public static JSONObject fromObject(Object obj) {
		return JSONObject.fromObject(obj, jsonConfig);
	}

	/**
	 * 将JavaBean对象列表转换为JSONArray对象
	 * 
	 * @param list
	 *            JavaBean对象列表
	 * @return JSONArray对象
	 */
	public static JSONArray fromObject(List<? extends Object> objs) {
		return JSONArray.fromObject(objs, jsonConfig);
	}

}
